#pragma once
#include<iostream>
#include<string>
#include<functional>

using namespace std;

typedef function<int(int,const string&,const uint16_t&,const string&)>func_t;

class Task
{
public:
    Task(int sock,string ip,uint16_t port)
    :_sock(sock)
    ,_ip(ip),_port(port)
    {

    }
    void operator()(const string name)
    {
        _func(_sock,ip,port,name);
    }
    ~Task(){}
private:
    int _sock;
    string _ip;
    uint16_t _port;
    func_t _func;
};
// typedef function<int(int,const string&,const uint16_t&)> _func;

// class Task
// {
// public: 
//     Task(){}
//     Task(int sock,const string ip,uint16_t port,func_t _func)
//     :_sock(sock),_ip(ip)
//     ,_port(port)
//     {

//     }
//     void operator()(cosnt string& name)
//     {
//         _func(_sock,_ip,_port);
//     }
// private:
//     int _sock;
//     string _ip;
//     uint16_t _port;
//     func_t _func;
// }   